//
//  PacketModel.h
//  Fotile
//
//  Created by AllenKwok on 16/5/24.
//  Copyright © 2016年 xlink.cn. All rights reserved.
//


#import <Foundation/Foundation.h>

// add for test
#import "FTSmartTypes.h"

/**
 协议字段约定：
 1.	包头(header)固定为0xf4f5\n
 2.	大小端：多于一个字节的整型数字以大端字节序编码\n
 3.	长度(len)是指从type开始到整个数据包结束所占用的字节数\n
 4.	Type（2B），高八位代表设备类型，0x01-蒸箱、0x02-烤箱、0x03-微波炉、0x04烟机、0x05灶具、0x06消毒柜、0x07热水器、0x08洗碗机、0x09净水器，0x10蒸微一体机，低八位代表产品型号
 
 5.	命令号(cmd)由发送方给出，接收方响应命令时需把命令号返回给发送方，同时stat设为响应
 
 6.	状态字（stat），表示请求（0x01）和响应（0x02）
 
 7.	Flags预留，默认为0x0000
 
 8.	Payload内容对应具体命令
 
 9.	校验：各字节相异或，CRC[1]=异或结果，默认CRC[0] = 0x00
 */
@interface PacketModel : NSObject

/** 包头 4byte*/
@property (assign, nonatomic) uint16_t header;
/** 长度 2byte*/
@property (assign, nonatomic) uint16_t len;
/** Type（2B) 高八位代表设备类型 低八位代表产品型号*/
@property (assign, nonatomic) uint16_t type;
/** 设备类型 */
@property (assign, nonatomic) uint8_t deviceType;
/** 设备型号 */
@property (assign, nonatomic) uint8_t deviceModel;
/** 命令号 1byte*/
@property (assign, nonatomic) CommandCode command;
/** 状态字（stat) 1byte*/
@property (assign, nonatomic) uint8_t status;
/** Flags预留，默认为0x0000 2byte*/
@property (assign, nonatomic) uint16_t flag;
/** 校验码 2byte 校验：各字节相异或，CRC[1]=异或结果，默认CRC[0] = 0x0*/
@property (assign, nonatomic) uint16_t checkCode;
/** Payload内容对应具体命令 */
@property (copy, nonatomic,readonly) NSData *payload;


/**
 config the device deviceData according to agreement

 @param payload packet data
 */
- (void)configInPayload:(NSData *)payload;

- (NSData *)getData;

- (instancetype)initWithPacketData:(NSData *)packetData;

-(BOOL)veriflcation;

@end
